home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / demos / wheel2 / show.sci < prev    next >
Text File  |  1999-09-16  |  3KB  |  117 lines

  1. function []=show(xx,t,p,slowflag)
  2. //[]=show(xx,t,p)
  3. // Just show the wheel evolution 
  4. // t ans p are the spherical angles of the observation point
  5. // given in radian
  6. // f_name is the function name to use for display 
  7. // can be wheel2
  8. //                     .    .   .
  9. // xx= [theta,phi,psi,teta,phi,psi,x,y]
  10. // !
  11. [lhs,rhs]=argn(0)
  12. if rhs <= 2 , p=%pi/3;end
  13. if rhs <= 2 , t=%pi/3;end
  14. if rhs <= 3 , slowflag=0;end
  15. nstep=1;r1=1.0;  //change nstep for postscript
  16. [nnr,nn]=size(xx);
  17. time=1:nstep:nn;
  18. //------------ generation of the wheel
  19. //[1] a set of points on the wheel
  20. //the first one is the contact point 
  21. //the coordinates are given in the (u,v,w) space 
  22. // as a matrix xu(:,t) ....
  23.  nnn=24
  24.  l=(1/nnn)*( 2*%pi)*(0:nnn)'
  25.  nu=prod(size(l));
  26.  xu=r1*cos(l).*.ones(time);
  27.  yu=r1*sin(l).*.ones(time);
  28.  zu=0*ones(l).*.ones(time);
  29.  
  30. //[2] Adding rays ( they are moving with time in the (u,v,w) space 
  31. //turning around w with angle psi
  32. //in xr,yr,zr : four moving points plus the center 
  33.   l= ones(4,1).*.xx(3,time) + [0;%pi/2;%pi;3*%pi/2].*.ones(time);
  34.   xr=r1*cos(l).*.[0;1]
  35.   yr=r1*sin(l).*.[0;1]
  36.   zr=0*ones(l).*.[0;1]
  37.   [nr,pr]=size(xr);  
  38.  
  39. //[3] using wheelg to transform these vectors in the (x,y,z) space 
  40.   [xu,yu,zu]=wheelg(nu,prod(size(time)),xu,yu,zu,xx(:,time));
  41.   [xr,yr,zr]=wheelg(nr,prod(size(time)),xr,yr,zr,xx(:,time));
  42.  
  43.   xmin=mini(xu);xmax=maxi(xu);
  44.   ymin=mini(yu);ymax=maxi(yu);
  45.   zmin=mini(zu);zmax=maxi(zu);
  46.   rect=[xmin,xmax,ymin,ymax,zmin,zmax]
  47.  
  48. //[4] plotting frame
  49.   t=t*180/%pi,p=p*180/%pi,
  50.   plot3d([xmin,xmax],[ymin,ymax],zmin*ones(2,2),t,p," ",[1,1,0],rect)
  51.  
  52. //[4'] I want to plot the rays with xpoly so i first use geom3d
  53.   [xr,yr]=geom3d(xr,yr,zr);
  54.  
  55. //[4''] Same to use xpoly so i first use geom3d
  56.   [xu,yu]=geom3d(xu,yu,zu);
  57.  
  58. //[5] animation 
  59.   xset("alufunction",6)
  60.   [n1,n2]=size(xu);
  61.   for i=1:1:n2-1,
  62.     wheeld(i);
  63.         xpause(slowflag);
  64.         wheeld(i);
  65.     ww=i:i+1;
  66.     xpoly(xu(1,ww)',yu(1,ww)',"lines");
  67.   end
  68.   wheeld(n2-1);
  69.   xset("alufunction",3);
  70. //end
  71.  
  72. function []=wheeld(i)
  73.     xpoly(xu(:,i),yu(:,i),"lines");
  74.         xpoly(matrix(xr(:,i),2,4),matrix(yr(:,i),2,4),"lines");
  75. //end
  76.  
  77.  
  78. function []=wheeld(i)
  79.     xfpoly(xu(:,i),yu(:,i),1);
  80.         xpoly(matrix(xr(:,i),2,4),matrix(yr(:,i),2,4),"lines");
  81. //end
  82.  
  83.  
  84. function [xxu,yyu,zzu]=wheelgf(n,t,xu,yu,zu,xx)
  85. //
  86. [xxu,yyu,zzu]=fort('wheelg',n,1,'i',t,2,'i',xu,3,'d',yu,4,'d',zu,5,'d',...
  87.     xx,6,'d','sort',3,4,5);
  88. //end
  89.  
  90. function [y]=test_wheel(n,t,x)
  91. //
  92. y=x
  93. [y]=fort('wheel',n,1,'i',t,2,'d',x,3,'d',y,4,'d','sort',4);
  94. //end
  95.  
  96.  
  97.  
  98.  
  99. function [xxu,yyu,zzu]=wheelgs(n,t,xu,yu,zu,xx)
  100. // slower version without dynamic link 
  101.    r=1.0
  102.    [n,p]=size(xu);
  103.    xxu=xu;
  104.    yyu=yu;
  105.    zzu=zu;
  106.    for i1=1:n;
  107.     cs2 = cos(xx(2,:))
  108.     cs1 = cos(xx(1,:))
  109.     si1 = sin(xx(1,:))
  110.     si2 = sin(xx(2,:))
  111.     xxu(i1,:) =xx(7,:)+r*(cs2.*cs1.*xu(i1,:)-si1.*yu(i1,:)+si2.*cs1.*zu(i1,:));
  112.     yyu(i1,:) =xx(8,:)+r*(cs2.*si1.*xu(i1,:)+cs1.*yu(i1,:)+si2.*si1.*zu(i1,:));
  113.     zzu(i1,:) =       r*si2 +r*( -si2.*xu(i1,:)+cs2.*zu(i1,:));
  114. end
  115. //end
  116.  
  117.